01 - ggplot2 theme

Autor/a

Yann Say

Fecha de publicación

2 de enero de 2025

El objetivo de los temas es ayudar a dar un toque “IMPACT” a los gráficos, no crearlos. El gráfico ya debería estar creado, es decir, con el tipo de gráfico, las estéticas correctas, el etiquetado, etc.

El siguiente ejemplo tiene como objetivo graficar los porcentajes de hogares por categoría de fuentes de agua, según el género del jefe de hogar (Este es un conjunto de datos ficticio).

Gráfico de barras sin formateo

data_to_plot <- presentresults::presentresults_MSNA2024_labelled_results_table |>
  dplyr::filter(
    analysis_var == "wash_drinking_water_source_cat",
    group_var == "hoh_gender", 
    group_var_value %in% c("male", "female")
  ) |> 
  dplyr::mutate(label_analysis_var_value = factor(label_analysis_var_value,
                                                  levels = c("Improved",
                                                             "Unimproved",
                                                             "Surface water",
                                                             "Undefined")))

initialplot <- data_to_plot %>%
  ggplot2::ggplot() +
  ggplot2::geom_col(
    ggplot2::aes(
      x = label_analysis_var_value,
      y = stat,
      fill = label_group_var_value
    ),
    position = "dodge"
  ) +
  ggplot2::labs(
    title = stringr::str_wrap(unique(data_to_plot$indicator), 50),
    x = stringr::str_wrap(unique(data_to_plot$label_analysis_var), 50),
    fill = stringr::str_wrap(unique(data_to_plot$label_group_var), 20)
  )
initialplot

Initial plot without theme.

theme_barplot

El theme_barplot aplicará la paleta de colores de REACH al gráfico de barras y ajustará el eje y de 0 a 100%.

initialplot + 
  theme_barplot()

Initial plot without theme_barplot

theme_impact

El theme_impact cambiará el fondo y el color del título.

initialplot + 
  theme_barplot() +
  theme_impact("reach")

Initial plot without theme_barplot and theme_impact

Otras paletas

initialplot + 
  theme_barplot(palette = impact_palettes$impact_palette) +
  theme_impact("impact")

Initial plot without theme_barplot and theme_impact set with IMPACT theme

Algunas paletas están disponibles en el objeto impact_palettes.

impact_palettes
$reach_palette
[1] "#58585A" "#EE5859" "#D2CBB8" "#c7c8ca"

$impact_palette
[1] "#000000" "#315975" "#58585A"

$agora_palette
[1] "#581522" "#023C40" "#4F9C35" "#F56741" "#F6ECD0"

$tol_palette
[1] "#322288" "#505050" "#44AA99" "#88CCEE" "#DDCC77" "#EE5859" "#AA4499"
[8] "#721621"

$high_contrast_tol_palette
[1] "#275587" "#CEA936" "#A35464"

$wong_palette
[1] "#EE5859" "#E69F00" "#56B4E9" "#322288" "#F0E442" "#0072B2" "#505050"
[8] "#CC79A7"

$divergent
[1] "#F15B22" "#F58120" "#FBAB35" "#209EA0" "#008083" "#0072B2" "#016060"

$divergent_with_neutral
[1] "#721621" "#D7191C" "#FDAE61" "#FFFFBF" "#97D3C3" "#209EA0" "#016060"

Errores y número de colores

La paleta debe tener suficientes colores para coincidir con la escala de relleno. La paleta de impacto solo tiene 3 colores, mientras que el gráfico necesita 4.

data_to_plot <- presentresults::presentresults_MSNA2024_labelled_results_table |>
  dplyr::filter(
    analysis_var == "snfi_fds_cannot_cat",
    group_var == "hoh_gender")

initialplot <- data_to_plot %>%
  ggplot2::ggplot() +
  ggplot2::geom_col(
    ggplot2::aes(
      x = label_analysis_var_value,
      y = stat,
      fill = label_group_var_value
    ),
    position = "dodge"
  ) +
  ggplot2::labs(
    title = stringr::str_wrap(unique(data_to_plot$indicator), 50),
    x = stringr::str_wrap(unique(data_to_plot$label_analysis_var), 50),
    fill = stringr::str_wrap(unique(data_to_plot$label_group_var), 20)
  )
initialplot + 
  theme_barplot(palette = impact_palettes$impact_palette) +
  theme_impact("impact")
Error in `palette()`:
! Insufficient values in manual scale. 4 needed but only 3 provided.

Si necesita más colores, consulte grDevices::colorRampPalette.

function_couleur <- grDevices::colorRampPalette(impact_palettes$divergent_with_neutral)
function_couleur(20)
 [1] "#721621" "#91161F" "#B1171D" "#D1181C" "#E1402E" "#ED6F43" "#F99E59"
 [8] "#FDBF74" "#FED892" "#FEF2B0" "#EEF8BF" "#CDEAC0" "#ACDCC2" "#8ACDBF"
[15] "#64BCB4" "#3FABA9" "#1E9A9C" "#148788" "#0A7374" "#016060"

Esta sección proviene de esta viñeta.